//给定一个非空整数数组，找到使所有数组元素相等所需的最小移动数，其中每次移动可将选定的一个元素加1或减1。 您可以假设数组的长度最多为10000。 
//
// 例如: 
//
// 
//输入:
//[1,2,3]
//
//输出:
//2
//
//说明：
//只有两个动作是必要的（记得每一步仅可使其中一个元素加1或减1）： 
//
//[1,2,3]  =>  [2,2,3]  =>  [2,2,2]
// 
// Related Topics 数组 数学 排序 
// 👍 136 👎 0

  
package com.zwy.leetCode.editor.cn;

import java.util.Arrays;

public class MinimumMovesToEqualArrayElementsIi{
    public static void main(String[] args) {
        Solution solution = new MinimumMovesToEqualArrayElementsIi().new Solution();
        int []arr={1,2,3,4,5,10,9,7,12,46};
        solution.minMoves2(arr);
      }
      //leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int minMoves2(int[] nums) {
        int res=0;
        int mid=0;
        Arrays.sort(nums);
        if(nums.length%2==0){
          mid=(nums[nums.length/2-1]+nums[nums.length/2])/2;
        }
        else
            mid=nums[nums.length/2];

        for (int i = 0; i < nums.length; i++) {
            res+=Math.abs(mid-nums[i]);
        }
        return res;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}